package com.auxgroup.smarthome.utils.excel;

import com.auxgroup.smarthome.utils.excel.util.ExcelUtil;
import org.apache.poi.ss.usermodel.*;

/**
 * 默认样式。当需要改变Excel文件的默认样式时，使用该类的一个对象来初始化Excel
 * 
 * @author zxh
 * 
 */
public class DefaultExcelStyle {
	/**
	 * 字体大小
	 */
	private short fontSize = 12;

	private String fontName = "宋体";

	private short backgroundColor = IndexedColors.AUTOMATIC.getIndex();

	private FillPatternType fillPatternType = FillPatternType.NO_FILL;

	private HorizontalAlignment align = HorizontalAlignment.GENERAL;

	private VerticalAlignment vAlign = VerticalAlignment.CENTER;

	private short fontColor = IndexedColors.AUTOMATIC.getIndex();

	private String defaultDatePattern = "yyyy-mm-dd hh:mm：ss";
	
	private short borderColor = IndexedColors.AUTOMATIC.getIndex();
	
	private BorderStyle borderStyle = BorderStyle.NONE;
	
	/**
	 * 边框颜色
	 * @return
	 */
	public short getBorderColor() {
		return borderColor;
	}

	/**
	 * 边框颜色
	 */
	public void setBorderColor(short borderColor) {
		this.borderColor = borderColor;
	}

	/**
	 * 边框样式
	 * @return
	 */
	public BorderStyle getBorderStyle() {
		return borderStyle;
	}

	/**
	 * 边框样式
	 * @param borderStyle
	 */
	public void setBorderStyle(BorderStyle borderStyle) {
		this.borderStyle = borderStyle;
	}

	/**
	 * 字体大小，默认12
	 * @param fontSize
	 */
	public void setFontSize(int fontSize) {
		this.fontSize = (short)fontSize;
	}

	/**
	 * 字体大小，默认12
	 */
	public short getFontSize() {
		return fontSize;
	}

	/**
	 * 字体名称，默认“宋体”
	 * @param fontName
	 */
	public void setFontName(String fontName) {
		this.fontName = fontName;
	}

	/**
	 * 字体名称，默认“宋体”
	 */
	public String getFontName() {
		return fontName;
	}

	/**
	 * 背景色，默认HSSFColor.AUTOMATIC.index，即无填充色
	 * @param backgroundColor 颜色，例如HSSFColor.RED.index
	 */
	public void setBackgroundColor(short backgroundColor) {
		this.backgroundColor = backgroundColor;
	}

	/**
	 * 背景色，默认HSSFColor.AUTOMATIC.index，即无色
	 */
	public short getBackgroundColor() {
		return backgroundColor;
	}

	/**
	 * 背景色填充样式，默认CellStyle.NO_FILL，即无填充
	 * 要设置填充色必须把该值设置为NO_FILL以外的值
	 * @param fillPatternType
	 */
	public void setFillPatternType(FillPatternType fillPatternType) {
		this.fillPatternType = fillPatternType;
	}

	/**
	 * 背景色填充样式，默认CellStyle.NO_FILL，即无填充
	 * 要设置填充色必须把该值设置为NO_FILL以外的值
	 */
	public FillPatternType getFillPatternType() {
		return fillPatternType;
	}

	/**
	 * 水平对齐方式，默认是CellStyle.ALIGN_GENERAL
	 * @param align 对齐方式，例如CellStyle.ALIGN_CENTER。可选值：ALIGN_GENERAL, ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_FILL, ALIGN_JUSTIFY, ALIGN_CENTER_SELECTION
	 */
	public void setAlign(HorizontalAlignment align) {
		this.align = align;
	}

	/**
	 * 水平对齐方式，默认是CellStyle.ALIGN_GENERAL
	 */
	public HorizontalAlignment getAlign() {
		return align;
	}

	/**
	 * 垂直对齐方式，默认CellStyle.VERTICAL_CENTER，即居中
	 * @param vAlign 对齐方式，例如CellStyle.VERTICAL_TOP。可选值：VERTICAL_TOP, VERTICAL_CENTER, VERTICAL_BOTTOM, VERTICAL_JUSTIFY
	 */
	public void setVAlign(VerticalAlignment vAlign) {
		this.vAlign = vAlign;
	}

	/**
	 * 垂直对齐方式，默认CellStyle.VERTICAL_CENTER，即居中
	 */
	public VerticalAlignment getVAlign() {
		return vAlign;
	}

	/**
	 * 字体颜色，默认是Font.COLOR_NORMAL
	 * @param fontColor 颜色，例如HSSFColor.RED.index
	 */
	public void setFontColor(short fontColor) {
		this.fontColor = fontColor;
	}

	/**
	 * 字体颜色，默认是Font.COLOR_NORMAL
	 */
	public short getFontColor() {
		return fontColor;
	}
	
	/**
	 * 设置默认的日期格式化模式，默认是yyyy-mm-dd hh:mm：ss，请参考excel的日期格式
	 * @param defaultDatePattern
	 */
	public void setDefaultDatePattern(String defaultDatePattern) {
		this.defaultDatePattern = defaultDatePattern;
	}

	/**
	 * 返回默认的日期格式化模式，默认是yyyy-mm-dd hh:mm：ss，请参考excel的日期格式
	 * @return
	 */
	public String getDefaultDatePattern() {
		return defaultDatePattern;
	}

	public DefaultExcelStyle() { }

	/**
	 * 初始化excel的默认样式
	 * @param ctx
	 * @param excel
	 * @param workbook
	 */
	public DefaultExcelStyle(ExcelContext ctx, Excel excel,  Workbook workbook) {
		CellStyle tempCellStyle;// 临时的样式
		Font tempFont;// 临时的字体

		ctx = new ExcelContext(excel, workbook);

		DefaultExcelStyle defaultStyle = new DefaultExcelStyle();
		ctx.setDefaultStyle(defaultStyle);

		excel.setWorkingSheet(0);
		tempCellStyle = workbook.createCellStyle();
		ctx.setTempCellStyle(tempCellStyle);
		tempFont = workbook.createFont();
		ctx.setTempFont(tempFont);
		//设置默认样式
		Cell cell = ExcelUtil.getCell(ctx.getWorkingSheet(), 0, 0);
		CellStyle cellStyle = cell.getCellStyle();
		cellStyle.setFillForegroundColor(defaultStyle.getBackgroundColor());
		cellStyle.setFillPattern(FillPatternType.NO_FILL);
		cellStyle.setAlignment(HorizontalAlignment.GENERAL);
		cellStyle.setFillPattern(defaultStyle.getFillPatternType());
		cellStyle.setAlignment(defaultStyle.getAlign());
		cellStyle.setVerticalAlignment(defaultStyle.getVAlign());
		//设置边框样式
		cellStyle.setBorderBottom(defaultStyle.getBorderStyle());
		cellStyle.setBorderLeft(defaultStyle.getBorderStyle());
		cellStyle.setBorderRight(defaultStyle.getBorderStyle());
		cellStyle.setBorderTop(defaultStyle.getBorderStyle());
		cellStyle.setBottomBorderColor(defaultStyle.getBorderColor());
		cellStyle.setTopBorderColor(defaultStyle.getBorderColor());
		cellStyle.setLeftBorderColor(defaultStyle.getBorderColor());
		cellStyle.setRightBorderColor(defaultStyle.getBorderColor());
		//默认字体
		Font font = workbook.createFont();
		font.setFontHeightInPoints(defaultStyle.getFontSize());
		font.setFontName(defaultStyle.getFontName());
		font.setColor(defaultStyle.getFontColor());
	}

}
